//
// Description: 5227. K 次操作后最大化顶端元素
// Created by Loading on 2022/3/13.
//

#include <bits/stdc++.h>

using namespace std;

int maximumTop(vector<int> &nums, int k) {
    int n = nums.size();
    // 只有一个元素
    if (n == 1) {
        if (k % 2 == 1) {
            return -1;
        } else {
            return nums[0];
        }
    }

    // 不操作，栈顶元素一定是 nums[0]
    if (k == 0) {
        return nums[0];
    }
    // 只操作一次，栈顶元素一定是 nums[1]
    if (k == 1) {
        return nums[1];
    }

    if (k > n) {
        // 操作次数大于数组长度，数组内最大值一定可以放在栈顶
        return *max_element(nums.begin(), nums.end());
    } else if (k == n) {
        // 操作次数等于数组长度，栈顶元素最大值为前 k - 1 个元素的最大值
        return *max_element(nums.begin(), nums.begin() + k - 1);
    } else {
        // 操作次数小于数组长度，栈顶元素最大值为前 k - 1 个元素的最大值 与 nums[k] 的最大值
        return max(*max_element(nums.begin(), nums.begin() + k - 1), nums[k]);
    }
}

int main() {
    vector<int> nums{5, 2, 2, 4, 0, 6};
    int k = 4;
    int res = maximumTop(nums, k);
    cout << res << endl;

    return 0;
}